home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_03 / saks / shape1.h < prev    next >
C/C++ Source or Header  |  1994-01-12  |  2KB  |  89 lines

  1. Listing 1 - a class hierarchy with virtual cloning functions that have 
  2. identical return type
  3.  
  4. //
  5. // base class 'shape'
  6. //
  7. class shape
  8.     {
  9. public:
  10.     enum palette { BLUE, GREEN, RED };
  11.     shape(palette c);
  12.     virtual double area() const = 0;
  13.     virtual shape *clone() const = 0;
  14.     palette color() const;
  15.     virtual const char *name() const = 0;
  16.     virtual ostream &put(ostream &os) const;
  17. private:
  18.     palette _color;
  19.     static const char *color_image[RED - BLUE + 1];
  20.     };
  21.  
  22. ...
  23.  
  24. //
  25. // class 'circle' derived from 'shape'
  26. //
  27. class circle : public shape
  28.     {
  29. public:
  30.     circle(palette c, double r);
  31.     double area() const;
  32.     shape *clone() const;
  33.     const char *name() const;
  34.     ostream &put(ostream &os) const;
  35. private:
  36.     double radius;
  37.     };
  38.  
  39. shape *circle::clone() const
  40.     {
  41.     return new circle(*this);
  42.     }
  43.  
  44. ...
  45.  
  46. //
  47. // class 'rectangle' derived from 'shape'
  48. //
  49. class rectangle : public shape
  50.     {
  51. public:
  52.     rectangle(palette c, double h, double w);
  53.     double area() const;
  54.     shape *clone() const;
  55.     const char *name() const;
  56.     ostream &put(ostream &os) const;
  57. private:
  58.     double height, width;
  59.     };
  60.  
  61. shape *rectangle::clone() const
  62.     {
  63.     return new rectangle(*this);
  64.     }
  65.  
  66. ...
  67.  
  68. //
  69. // class 'triangle' derived from 'shape'
  70. //
  71. class triangle : public shape
  72.     {
  73. public:
  74.     triangle(palette c, double s1, double s2, double a);
  75.     double area() const;
  76.     shape *clone() const;
  77.     const char *name() const;
  78.     ostream &put(ostream &os) const;
  79. private:
  80.     double side1, side2, angle;
  81.     };
  82.  
  83. shape *triangle::clone() const
  84.     {
  85.     return new triangle(*this);
  86.     }
  87.  
  88. ...
  89.